package com.qf.util;

import com.qf.bo.UserDetailsBO;
import com.qf.enums.ObjectFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * Security工具类
 *
 * @USER: Administrator
 * @DATE: 2025/9/4 下午7:33
 * @VERSION: 1.0.0
 */
public class SecurityUtils {

    /**
     * 1. 获取当前登录的Authentication对象（最基础的认证信息）
     * 作用：获取认证状态、权限列表、用户载体（principal）等原始信息
     * @return Authentication 认证对象；若未登录，返回null
     */
    public static Authentication getCurrentAuthentication() {
        // 从ThreadLocal中获取当前线程的SecurityContext
        return SecurityContextHolder.getContext().getAuthentication();
    }

    /**
     * 2. 获取当前登录的用户信息（UserDetails类型）
     * @return UserDetailsBO 用户信息；若未登录，返回null
     */
    public static UserDetailsBO getCurrentUser() {
        Authentication authentication = getCurrentAuthentication();
        // 校验认证对象是否存在，且principal是UserDetails类型
        if (authentication == null || !(authentication.getPrincipal() instanceof UserDetails)) {
            return ObjectFactory.INSTANCE.createInstance(UserDetailsBO.class);
        }
        // 强转为自定义的UserDetailsImpl（或Spring默认的User）
        return (UserDetailsBO) authentication.getPrincipal();

    }

}
